const express = require('express');
const cors = require('cors');
const helmet = require('helmet');
const morgan = require('morgan');
const compression = require('compression');
const path = require('path');

// 导入路由（文档 1.3 节+6.3 节标准路由列表，无新增）
const authRoutes = require('./routes/auth');
const userRoutes = require('./routes/users');
const productRoutes = require('./routes/products');
const cartRoutes = require('./routes/cart');
const orderRoutes = require('./routes/orders');
const statsRoutes = require('./routes/stats');

// 导入中间件（文档 1.3 节指定的全局错误处理中间件）
const errorHandler = require('./middleware/errorHandler');

const app = express();

// 基础中间件（按文档 1.3 节安全优先级排序，与文档完全一致）
app.use(helmet()); // 安全防护中间件
app.use(cors()); // 跨域处理
app.use(compression()); // 响应压缩
app.use(morgan('combined')); // 日志记录

// 解析中间件（文档 1.3 节配置，限制 10MB 请求体）
app.use(express.json({ limit: '10MB' }));
app.use(express.urlencoded({ extended: true }));

// 静态文件服务（文档 1.3 节标准配置，映射 uploads 目录）
app.use('/uploads', express.static(path.join(__dirname, 'uploads')));

// API 路由注册（严格遵循文档路由路径规范：/api/xxx）
app.use('/api/auth', authRoutes);
app.use('/api/users', userRoutes);
app.use('/api/products', productRoutes);
app.use('/api/cart', cartRoutes);
app.use('/api/orders', orderRoutes);
app.use('/api/stats', statsRoutes);

// 健康检查接口（文档 1.3 节标准接口，返回服务状态）
app.get('/health', (req, res) => {
  res.json({ 
    status: 'OK', 
    message: 'EShop API is running',
    timestamp: new Date().toISOString()
  });
});

// 404 路由（关键修正：用“前缀匹配+非通配符”替代 *，100%兼容 path-to-regexp）
// 文档隐含逻辑：项目所有业务路由均以 /api/ 或 /uploads/ 或 /health 开头，未匹配的路径直接兜底
app.use((req, res) => {
  res.status(404).json({
    success: false,
    message: `路由 ${req.originalUrl} 不存在`
  });
});

// 全局错误处理（文档 1.3 节强制要求：必须放在所有路由/中间件之后）
app.use(errorHandler);

module.exports = app;